package main

import (
	"io"
	"os"
	"strings"
)

type rot13Reader struct {
	r io.Reader
}
func (r13 rot13Reader) Read (b []byte)(int,error){
	n, _ := r13.r.Read(b)
	for i := 0 ; i< n ; i++{
		if(b[i] >= 'A' && b[i] <= 'Z'){
			b[i] = 'A' + (b[i] - 'A'+ 13)%26
		}
		if(b[i] >= 'a' && b[i] <= 'z'){
			b[i] = 'a' + (b[i] - 'a'+ 13)%26
		}
	}
	return n,nil
}

func main() {
	s := strings.NewReader("Lbh penpxrq gur pbqr!")
	r := rot13Reader{s}
	io.Copy(os.Stdout, &r)
}
//notice:在 Read 方法中，不能使用 len(b) 来确定读取的字节数，因为 len(b) 只是表示切片 b 的容量，而不是实际读取的字节数。实际读取的字节数是由 Read 方法的返回值确定的。
